package model;

public class Vetor extends Object{

	private int dimensao;
	private double[] valor;
	
	public Vetor(int dimensao) {
		this.dimensao=dimensao;
		valor=new double[dimensao];
	}
	
	public void setValor(int posicao,double novoValor){
		valor[posicao]=novoValor;
	}
	
	public double getValor(int posicao){
		return valor[posicao];
	}

	public int getDimensao() {
		return dimensao;
	}

	public void setDimensao(int dimensao) {
		this.dimensao = dimensao;
	}

	public static void imprimir(Vetor v){
		for(int i=0;i<v.getDimensao();i++){
			System.out.println(v.getValor(i)+" ");
		}
		System.out.println();
	}
	
	public void gerarVetorGlobal(Elemento[] e,int numeroElementos){
		this.setValor(0, e[0].getFLocal().getValor(0));
		for(int i=1;i<numeroElementos;i++){
			 this.setValor(i,e[i-1].getFLocal().getValor(1)+e[i].getFLocal().getValor(0));
		}
		this.setValor(numeroElementos, e[numeroElementos-1].getFLocal().getValor(1));
	}
	
	public void addCondicoesContorno(int tipo,Matriz kGlobal,double valorExtremo1,double valorExtremo2,int numeroElementos,double alfa){
		//1-Dirichlet
		//2-Neuman
		//3-mista1-derivada,valor
		//4-mista2-valor,derivada
		switch(tipo){
			case 1:
				this.setValor(0, valorExtremo1);
				this.setValor(1, this.getValor(1)-valorExtremo1*kGlobal.getValor(1,0));
				this.setValor(numeroElementos, valorExtremo2);
				this.setValor(numeroElementos-1, this.getValor(numeroElementos-1)-valorExtremo2*kGlobal.getValor(numeroElementos-1,numeroElementos));
				kGlobal.addCondicoesContorno(1,numeroElementos);
				break;
			case 2:
				this.setValor(0, this.getValor(0)-alfa*valorExtremo1);
				this.setValor(numeroElementos, this.getValor(numeroElementos)+alfa*valorExtremo2);
				break;
			case 3:
				this.setValor(0, this.getValor(0)-alfa*valorExtremo1);
				this.setValor(numeroElementos, valorExtremo2);
				this.setValor(numeroElementos-1, this.getValor(numeroElementos-1)-valorExtremo2*kGlobal.getValor(numeroElementos-1,numeroElementos));
				kGlobal.addCondicoesContorno(3,numeroElementos);
				break;
			case 4:
				this.setValor(0, valorExtremo1);
				this.setValor(1, this.getValor(1)-valorExtremo1*kGlobal.getValor(1,0));
				this.setValor(numeroElementos, this.getValor(numeroElementos)+alfa*valorExtremo2);
				kGlobal.addCondicoesContorno(4,numeroElementos);
		}
	}
}